Recursive go pattern
何が嬉しい?
仕様のへんこうにたいおうしやすい
再帰関数をスタートする前にvalidationの処理を追加するなどがやりやすい
goという関数を定義して再帰に使う
code:hs
where
go ..
普通の再帰では、indexを減らしていくのに対して、
goは0から始めて増やしていく
go
goを再帰的に呼ぶ
indexというかaccumrator的なものを引数に取るイメージ?
具体例
code:hs
msort [] = []
msort xs = go $ map (: []) xs
where
go xs = go $ pairs xs
pairs (a:b:t) = merge a b : pairs t
pairs t = t